package com.linfaxin.transitionplayer.interpolators;
import android.animation.TimeInterpolator;
import android.util.Pair;
import java.util.ArrayList;
/**
* Created by linfaxin on 2015/8/9.
* Email: linlinfaxin@163.com
*/
public class MultiTimeInterpolator implements TimeInterpolator{
ArrayList<Pair<TimeInterpolator, Float>> pairs = new ArrayList<>();
private int totalWeight = 0;
public MultiTimeInterpolator(TimeInterpolator... interpolators){
addInterpolators(interpolators);
}
public void addInterpolators(TimeInterpolator... interpolators){
for(TimeInterpolator interpolator : interpolators){
addInterpolator(interpolator, 1);
}
}
public void addInterpolator(TimeInterpolator interpolator){
addInterpolator(interpolator, 1);
}
public void addInterpolator(TimeInterpolator interpolator, float weight){
if(interpolator==null || weight<0) return;
pairs.add(new Pair<>(interpolator, weight));
totalWeight += weight;
}
@Override
public float getInterpolation(float input) {
float weightSum = 0;
for(Pair<TimeInterpolator, Float> pair : pairs){
float weight = pair.second;
float weightStart = weightSum;
float weightEnd = weightStart + weight;
float inputWeight = input * totalWeight;
if(inputWeight > weightStart && inputWeight <= weightEnd){
float convertInput = (inputWeight - weightStart) / weight;
return pair.first.getInterpolation(convertInput);
}
weightSum = weightEnd;
}
return 0;
}
}